package com.irdstudio.efp.console.service.impl;

import java.util.List;
import java.util.Objects;
import java.util.UUID;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.irdstudio.basic.framework.core.base.AbstractFrameworkService;
import com.irdstudio.basic.framework.core.base.FrameworkService;
import com.irdstudio.efp.console.common.BizParamCfgEnum;
import com.irdstudio.efp.console.service.dao.BizParamCfgDao;
import com.irdstudio.efp.console.service.dao.SDicTreeDao;
import com.irdstudio.efp.console.service.domain.BizParamCfg;
import com.irdstudio.efp.console.service.domain.BizParamValue;
import com.irdstudio.efp.console.service.facade.BizParamCfgService;
import com.irdstudio.efp.console.service.vo.BizParamCfgVO;
import com.irdstudio.efp.console.service.vo.BizParamValueVO;

/**
 * <p>
 * ServiceImpl: 业务参数配置表
 * <p>
 * 
 * @author fuzm
 * @date 2018-05-10
 */
@Service("bizParamCfgService")
public class BizParamCfgServiceImpl extends AbstractFrameworkService implements BizParamCfgService, FrameworkService {

	private static Logger logger = LoggerFactory.getLogger(BizParamCfgServiceImpl.class);

	@Autowired
	private BizParamCfgDao bizParamCfgDao;

	@Autowired
	private SDicTreeDao sDicTreeDao;

	/**
	 * 新增操作
	 */
	@SuppressWarnings("unchecked")
	public int insertBizParamCfg(BizParamCfgVO inBizParamCfgVo) {
		logger.debug("当前新增条件为:" + inBizParamCfgVo.toString());
		int num = 0;
		List<BizParamValue> listValues = null;
		try {
			BizParamCfg bizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, bizParamCfg);
			String forbidIndus = UUID.randomUUID().toString().replace("-", "");
			bizParamCfg.setForbidIndus(forbidIndus);
			String loginUserLeageOrgCode = inBizParamCfgVo.getLoginUserLeageOrgCode();
			
			String cfgId = this.getSequence("CFG_ID");
			bizParamCfg.setCfgId(cfgId);
			bizParamCfg.setSignLmtCont("2");//设置默认额度协议为'否'
			bizParamCfg.setStatus("1");//设置默认配置状态为生效
			List<BizParamValueVO> bizParamValueVOs = inBizParamCfgVo.getForbidIndusArr();
			listValues = (List<BizParamValue>) beansCopy(bizParamValueVOs, BizParamValue.class);
			
			if (loginUserLeageOrgCode.equals("00001")) {
				bizParamCfg.setRpovinceFlag("1");
				BizParamCfg bizParamCfgT = bizParamCfgDao.queryByLoginLegalOrgCode(bizParamCfg);
				// 判断是否已存在省级配置，存在则不允许新增，反之新增
				if (bizParamCfgT == null) {
					num = bizParamCfgDao.insertBizParamCfg(bizParamCfg);
					if(num == 1){
						//批量新增禁入行业
						if(listValues != null && listValues.size() > 0){
							for (BizParamValue bizParamValue : listValues) {
								bizParamValue.setValueId(forbidIndus);
							}
							sDicTreeDao.insertMoreBizParamValue(listValues);
						}
					}
				} else {
					// 省级配置已经存在，不能再新增
					num = -3;
				}
			} else {

				// 判断是否已存在当前法人机构配置，存在则不允许新增，反之允许新增
				bizParamCfg.setRpovinceFlag("2");
				BizParamCfg newbizParamCfg = bizParamCfgDao.queryByLoginLegalOrgCode(bizParamCfg);
				if (newbizParamCfg == null) {
					// 查询是否有省级配置
					BizParamCfg bizParamCfgT = bizParamCfgDao.queryByRFlag(bizParamCfg);
					if (bizParamCfgT != null) {
						if (!StringUtils.isEmpty(bizParamCfgT.getCrdExpiryDt())
								&& !StringUtils.isEmpty(bizParamCfg.getCrdExpiryDt())) {
							int crdExpiryDtT = Integer.parseInt(bizParamCfgT.getCrdExpiryDt());
							int crdExpiryDt = Integer.parseInt(bizParamCfg.getCrdExpiryDt());
							if (crdExpiryDt > crdExpiryDtT) {
								// 征信查询有效期（天）最大值不能大于省级配置
								return num = -4;
							}
						}
						if (!StringUtils.isEmpty(bizParamCfgT.getApprExpiryDt()) 
								&& !StringUtils.isEmpty(bizParamCfg.getApprExpiryDt())) {
							int apprExpiryDtT = Integer.parseInt(bizParamCfgT.getApprExpiryDt());
							int apprExpiryDt = Integer.parseInt(bizParamCfg.getApprExpiryDt());
							if (apprExpiryDt > apprExpiryDtT) {
								// 批复有效期（天）不能大于省级配置
								return num = -5;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getChkRptCrtPeriod()) 
								&& !StringUtils.isEmpty(bizParamCfg.getChkRptCrtPeriod())) {
							int chkRptCrtPeriodT = Integer.parseInt(bizParamCfgT.getChkRptCrtPeriod());
							int chkRptCrtPeriod = Integer.parseInt(bizParamCfg.getChkRptCrtPeriod());
							if (chkRptCrtPeriod > chkRptCrtPeriodT) {
								// 检查报告生成周期（月）不能大于省级配置
								return num = -6;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getRegChkCrtPeriod())
								&& !StringUtils.isEmpty(bizParamCfg.getRegChkCrtPeriod())) {
							int regChkCrtPeriodT = Integer.parseInt(bizParamCfgT.getRegChkCrtPeriod());
							int regChkCrtPeriod = Integer.parseInt(bizParamCfg.getRegChkCrtPeriod());
							if (regChkCrtPeriod > regChkCrtPeriodT) {
								// 定期检查任务生成周期（月）不能大于省级配置
								return num = -7;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getCrdOrgUpperLmt())
								&& !StringUtils.isEmpty(bizParamCfg.getCrdOrgUpperLmt())) {
							int crdOrgUpperLmtT = Integer.parseInt(bizParamCfgT.getCrdOrgUpperLmt());
							int crdOrgUpperLmt = Integer.parseInt(bizParamCfg.getCrdOrgUpperLmt());
							if (crdOrgUpperLmt > crdOrgUpperLmtT) {
								// 授信机构数量上限不能大于省级配置
								return num = -8;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getCrdLmtAmt())
								&& !StringUtils.isEmpty(bizParamCfg.getCrdLmtAmt())) {
							float crdLmtAmtT = Float.parseFloat(bizParamCfgT.getCrdLmtAmt());
							float crdLmtAmt = Float.parseFloat(bizParamCfg.getCrdLmtAmt());
							if (crdLmtAmt > crdLmtAmtT) {
								// 授信总限额（万）不能大于省级配置
								return num = -9;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getOrgLmtAmt())
								&& !StringUtils.isEmpty(bizParamCfg.getOrgLmtAmt())) {
							float orgLmtAmtT = Float.parseFloat(bizParamCfgT.getOrgLmtAmt());
							float orgLmtAmt = Float.parseFloat(bizParamCfg.getOrgLmtAmt());
							if (orgLmtAmt > orgLmtAmtT) {
								// 机构授信限额（万）不能大于省级配置
								return num = -10;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getTphChkLmtAmt())
								&& !StringUtils.isEmpty(bizParamCfg.getTphChkLmtAmt())) {
							float tphChkLmtAmtT = Float.parseFloat(bizParamCfgT.getTphChkLmtAmt());
							float tphChkLmtAmt = Float.parseFloat(bizParamCfg.getTphChkLmtAmt());
							if (tphChkLmtAmt > tphChkLmtAmtT) {
								// 电核限额不能大于省级配置
								return num = -11;
							}
						}
						
						if (!StringUtils.isEmpty(bizParamCfgT.getTphChkExpiryDt())
								&& !StringUtils.isEmpty(bizParamCfg.getTphChkExpiryDt())) {
							float getTphChkExpiryDtT = Float.parseFloat(bizParamCfgT.getTphChkExpiryDt());
							float getTphChkExpiryDt = Float.parseFloat(bizParamCfg.getTphChkExpiryDt());
							if (getTphChkExpiryDt > getTphChkExpiryDtT) {
								// 支用有效期不能大于省级配置
								return num = -12;
							}
						}
						
						if (!StringUtils.isEmpty(bizParamCfgT.getLoanAfterTrem())
								&& !StringUtils.isEmpty(bizParamCfg.getLoanAfterTrem())) {
							float getLoanAfterTremT = Float.parseFloat(bizParamCfgT.getLoanAfterTrem());
							float getLoanAfterTrem = Float.parseFloat(bizParamCfg.getLoanAfterTrem());
							if (getLoanAfterTrem > getLoanAfterTremT) {
								// 贷后征信查询期限（天）不能大于省级配置
								return num = -13;
							}
						}
						
						if(!StringUtils.isEmpty(bizParamCfgT.getAmtIntervalCount()) 
								&& !StringUtils.isEmpty(bizParamCfg.getAmtIntervalCount())){
							int getAmtIntervalCountT = Integer.parseInt(bizParamCfgT.getAmtIntervalCount());
							int getAmtIntervalCount = Integer.parseInt(bizParamCfg.getAmtIntervalCount());
							
							if (getAmtIntervalCount < getAmtIntervalCountT) {
								// 提额间隔天数/批复有效期（天）不能低于省级配置
								return num = -14;
							}
						}
						
						if(!StringUtils.isEmpty(bizParamCfgT.getAmtCoefficient()) 
								&& !StringUtils.isEmpty(bizParamCfg.getAmtCoefficient())){
							float getAmtCoefficientT = Float.parseFloat(bizParamCfgT.getAmtCoefficient());
							float getAmtCoefficient = Float.parseFloat(bizParamCfg.getAmtCoefficient());
							
							if (getAmtCoefficient > getAmtCoefficientT) {
								// 提额系数不能高于省级配置
								return num = -15;
							}
						}
						
						if(!StringUtils.isEmpty(bizParamCfgT.getAmtLmtMin()) 
								&& !StringUtils.isEmpty(bizParamCfg.getAmtLmtMin())){
							float getAmtLmtMinT = Float.parseFloat(bizParamCfgT.getAmtLmtMin());
							float getAmtLmtMin = Float.parseFloat(bizParamCfg.getAmtLmtMin());
							
							if (getAmtLmtMin != getAmtLmtMinT) {
								// 提额额度最小值须等于省级配置
								return num = -16;
							}
						}
							
						// 新增法人机构配置
						num = bizParamCfgDao.insertBizParamCfg(bizParamCfg);
						String valueId = bizParamCfgT.getForbidIndus();
						BizParamValueVO bizParamValueVO = new BizParamValueVO();
						bizParamValueVO.setValueId(valueId);
						// 根据省级配置禁入行业UId查询省级禁入行业所有配置
						List<BizParamValue> bizParamValues = sDicTreeDao.queryAllBizValue(bizParamValueVO);
						if (bizParamValues != null && bizParamValues.size() > 0) {
							for (BizParamValue bizParamValue : bizParamValues) {
								int sum = 0;
								bizParamValue.setValueId(forbidIndus);
								if(listValues != null && listValues.size() > 0){
									for (BizParamValue listValue : listValues) {
										listValue.setValueId(forbidIndus);
										//判断新增的禁入行业是否与省级配置的禁入行业有重复
										if(listValue.getEnname().equals(bizParamValue.getEnname())){
											sum++;
										}
									}
									if(sum < 1){
										listValues.add(bizParamValue);
									}
								}else{
									listValues.add(bizParamValue);
								}
							}
							// 法人机构根据省级的禁入行业配置批量新增
							num = sDicTreeDao.insertMoreBizParamValue(listValues);
						}else{
							//没有省级配置禁入行业
							if(listValues != null && listValues.size() > 0){
								for (BizParamValue bizParamValue : listValues) {
									bizParamValue.setValueId(forbidIndus);
								}
								sDicTreeDao.insertMoreBizParamValue(listValues);
							}
						}
					}else{
						//没有省级配置直接新增
						num = bizParamCfgDao.insertBizParamCfg(bizParamCfg);
						if(num == 1){
							if(listValues != null && listValues.size() > 0){
								//批量新增禁入行业
								for (BizParamValue bizParamValue : listValues) {
									bizParamValue.setValueId(forbidIndus);
								}
								sDicTreeDao.insertMoreBizParamValue(listValues);
							}
						}
					}
				} else {
					// 已经存在当前法人机构配置不能再新增
					num = -2;
				}
			}
			;

		} catch (Exception e) {
			logger.error("新增数据发生异常!", e);
			num = -1;
		}
		logger.debug("当前新增数据条数为:" + num);
		return num;
	}

	/**
	 * 删除操作
	 */
	public int deleteByPk(BizParamCfgVO inBizParamCfgVo) {
		logger.debug("当前删除数据条件为:" + inBizParamCfgVo);
		int num = 0;
		try {
			BizParamCfg bizParamCfg = new BizParamCfg();
			BizParamValue bizParamValue = new BizParamValue();
			beanCopy(inBizParamCfgVo, bizParamCfg);
			bizParamValue.setValueId(bizParamCfg.getForbidIndus());
			//判断是否是本机构操作
			if (inBizParamCfgVo.getLegalOrgCode().equals(inBizParamCfgVo.getLoginUserLeageOrgCode())) {
				// 判断是否是删除省级配置
				if (inBizParamCfgVo.getRpovinceFlag().equals("1")) {
					// 如果是删除省级配置,在判断省级禁入行业是否有配置
					BizParamValueVO bizParamValueVo = new BizParamValueVO();
					bizParamValueVo.setValueId(bizParamCfg.getForbidIndus());
					List<BizParamValue> bizParamValues = sDicTreeDao.queryAllBizValue(bizParamValueVo);
					if (bizParamValues != null && bizParamValues.size() > 0) {
						//删除省级禁入行业配置
						num = sDicTreeDao.deleteByValueAndEnname(bizParamValue);
					}
					// 删除省级配置
					num = bizParamCfgDao.deleteByPk(bizParamCfg);

				} else {
					// 不是删除省级配置
					num = bizParamCfgDao.deleteByPk(bizParamCfg);
					if (num == 1) {
						num = sDicTreeDao.deleteByValueAndEnname(bizParamValue);
					}
				}
			}else{
				//不是本法人机构不能删除
				num = -2;
			}

		} catch (Exception e) {
			logger.error("删除数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:" + inBizParamCfgVo + "删除的数据条数为" + num);
		return num;
	}

	/**
	 * 更新操作
	 */
	@SuppressWarnings("unchecked")
	public int updateByPk(BizParamCfgVO inBizParamCfgVo) {
		logger.debug("当前修改数据为:" + inBizParamCfgVo.toString());
		
		int num = 0;
		List<BizParamValue> listValues = null;
		try {
			BizParamCfg bizParamCfg = new BizParamCfg();
			BizParamValue oldBizParamValue = new BizParamValue();
			beanCopy(inBizParamCfgVo, bizParamCfg);
			List<BizParamValueVO> bizParamValues = inBizParamCfgVo.getForbidIndusArr();
			listValues = (List<BizParamValue>) beansCopy(bizParamValues, BizParamValue.class);
			
			if (bizParamCfg.getLegalOrgCode().equals(bizParamCfg.getLoginUserLeageOrgCode())) {
				if (bizParamCfg.getLegalOrgCode().equals("00001")) {
					
					//判断修改输入的系数是否与原来相等(修改前)
					BizParamCfg bcfg = bizParamCfgDao.queryByPk(bizParamCfg);
					String newCoefficient = bizParamCfg.getAmtCoefficient();
					String oldCoefficient = bcfg.getAmtCoefficient();
					
					String newAmtLmtMin = bizParamCfg.getAmtLmtMin();
					String oldAmtLmtMin = bcfg.getAmtLmtMin();
					
					String newAmtIntervalCount = bizParamCfg.getAmtIntervalCount();
					String oldAmtIntervalCount = bcfg.getAmtIntervalCount();
					
					
					// 省级修改更新
					num = bizParamCfgDao.updateByPk(bizParamCfg);
					
					if(num >= 1){
						if(listValues != null && listValues.size() > 0){
							//删除原来禁入行业配置
							oldBizParamValue.setValueId(bizParamCfg.getForbidIndus());
							num = sDicTreeDao.deleteByValueAndEnname(oldBizParamValue);
							for (BizParamValue bizParamValue : listValues) {
								bizParamValue.setValueId(bizParamCfg.getForbidIndus());
							}
							num = sDicTreeDao.insertMoreBizParamValue(listValues);
						}
						
						//省级提额系数或提额间隔天数被修改，其他机构相应更新为小于省级的配置
						if (!newCoefficient.equals(oldCoefficient) || !newAmtIntervalCount.equals(oldAmtIntervalCount)) {
							List<BizParamCfg> bizParamCfgs = bizParamCfgDao.queryAllNotEqual(bizParamCfg);
							if (bizParamCfgs != null && bizParamCfgs.size()>0) {
								for (int i = 0; i < bizParamCfgs.size(); i++) {
									BizParamCfg in = bizParamCfgs.get(i);
									if (!newCoefficient.equals(oldCoefficient)) {
										in.setAmtCoefficient(newCoefficient);
									}
									if (!newAmtIntervalCount.equals(oldAmtIntervalCount)) {
										in.setAmtIntervalCount(newAmtIntervalCount);
									}
									bizParamCfgDao.updateCoefAndAmtIntCountByLegalCode(in);
								}
						}
						}
						
						//省级提额额度最小值被修改，其他机构相应更新为省级配置
						if (!newAmtLmtMin.equals(oldAmtLmtMin)) {
							
							 bizParamCfgDao.updateOtherAll(bizParamCfg);
						}
						
					}
				} else {
					// 法人机构修改更新
					// 查看省级是否有配置
					BizParamCfg bizParamCfgT = bizParamCfgDao.queryByRFlag(bizParamCfg);
					if (bizParamCfgT != null) {
						if (!StringUtils.isEmpty(bizParamCfgT.getCrdExpiryDt())
								&& !StringUtils.isEmpty(bizParamCfg.getCrdExpiryDt())) {
							int crdExpiryDtT = Integer.parseInt(bizParamCfgT.getCrdExpiryDt());
							int crdExpiryDt = Integer.parseInt(bizParamCfg.getCrdExpiryDt());
							if (crdExpiryDt > crdExpiryDtT) {
								// 征信查询有效期（天）最大值不能大于省级配置
								return num = -4;
							}
						}
						if (!StringUtils.isEmpty(bizParamCfgT.getApprExpiryDt())
								&& !StringUtils.isEmpty(bizParamCfg.getApprExpiryDt())) {
							int apprExpiryDtT = Integer.parseInt(bizParamCfgT.getApprExpiryDt());
							int apprExpiryDt = Integer.parseInt(bizParamCfg.getApprExpiryDt());
							if (apprExpiryDt > apprExpiryDtT) {
								// 批复有效期（天）
								return num = -5;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getChkRptCrtPeriod()) 
								&& !StringUtils.isEmpty(bizParamCfg.getChkRptCrtPeriod())) {
							int chkRptCrtPeriodT = Integer.parseInt(bizParamCfgT.getChkRptCrtPeriod());
							int chkRptCrtPeriod = Integer.parseInt(bizParamCfg.getChkRptCrtPeriod());
							if (chkRptCrtPeriod > chkRptCrtPeriodT) {
								// 检查报告生成周期（月）不能大于省级配置
								return num = -6;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getRegChkCrtPeriod()) 
								&& !StringUtils.isEmpty(bizParamCfg.getRegChkCrtPeriod())) {
							int regChkCrtPeriodT = Integer.parseInt(bizParamCfgT.getRegChkCrtPeriod());
							int regChkCrtPeriod = Integer.parseInt(bizParamCfg.getRegChkCrtPeriod());
							if (regChkCrtPeriod > regChkCrtPeriodT) {
								// 定期检查任务生成周期（月）不能大于省级配置
								return num = -7;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getCrdOrgUpperLmt())
								&& !StringUtils.isEmpty(bizParamCfg.getCrdOrgUpperLmt())) {
							int crdOrgUpperLmtT = Integer.parseInt(bizParamCfgT.getCrdOrgUpperLmt());
							int crdOrgUpperLmt = Integer.parseInt(bizParamCfg.getCrdOrgUpperLmt());
							if (crdOrgUpperLmt > crdOrgUpperLmtT) {
								// 授信机构数量上限不能大于省级配置
								return num = -8;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getCrdLmtAmt())
								&& !StringUtils.isEmpty(bizParamCfg.getCrdLmtAmt())) {
							
							float crdLmtAmtT = Float.parseFloat(bizParamCfgT.getCrdLmtAmt());
							float crdLmtAmt = Float.parseFloat(bizParamCfg.getCrdLmtAmt());
							if (crdLmtAmt > crdLmtAmtT) {
								// 授信总限额（万）不能大于省级配置
								return num = -9;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getOrgLmtAmt())
								&& !StringUtils.isEmpty(bizParamCfg.getOrgLmtAmt())) {
							float orgLmtAmtT = Float.parseFloat(bizParamCfgT.getOrgLmtAmt());
							float orgLmtAmt = Float.parseFloat(bizParamCfg.getOrgLmtAmt());
							if (orgLmtAmt > orgLmtAmtT) {
								// 机构授信限额（万）不能大于省级配置
								return num = -10;
							}
						}

						if (!StringUtils.isEmpty(bizParamCfgT.getTphChkLmtAmt())
								&& !StringUtils.isEmpty(bizParamCfg.getTphChkLmtAmt())) {
							float tphChkLmtAmtT = Float.parseFloat(bizParamCfgT.getTphChkLmtAmt());
							float tphChkLmtAmt = Float.parseFloat(bizParamCfg.getTphChkLmtAmt());
							if (tphChkLmtAmt > tphChkLmtAmtT) {
								// 电核限额不能大于省级配置
								return num = -11;
							}
						}
						
						if (!StringUtils.isEmpty(bizParamCfgT.getTphChkExpiryDt())
								&& !StringUtils.isEmpty(bizParamCfg.getTphChkExpiryDt())) {
							float getTphChkExpiryDtT = Float.parseFloat(bizParamCfgT.getTphChkExpiryDt());
							float getTphChkExpiryDt = Float.parseFloat(bizParamCfg.getTphChkExpiryDt());
							if (getTphChkExpiryDt > getTphChkExpiryDtT) {
								// 支用有效期不能大于省级配置
								return num = -12;
							}
						}
						
						if (!StringUtils.isEmpty(bizParamCfgT.getLoanAfterTrem())
								&& !StringUtils.isEmpty(bizParamCfg.getLoanAfterTrem())) {
							float getLoanAfterTremT = Float.parseFloat(bizParamCfgT.getLoanAfterTrem());
							float getLoanAfterTrem = Float.parseFloat(bizParamCfg.getLoanAfterTrem());
							if (getLoanAfterTrem > getLoanAfterTremT) {
								// 贷后征信查询期限（天）不能大于省级配置
								return num = -13;
							}
						}
						
						if(!StringUtils.isEmpty(bizParamCfgT.getAmtIntervalCount()) 
								&& !StringUtils.isEmpty(bizParamCfg.getAmtIntervalCount())){
							int getAmtIntervalCountT = Integer.parseInt(bizParamCfgT.getAmtIntervalCount());
							int getAmtIntervalCount = Integer.parseInt(bizParamCfg.getAmtIntervalCount());
							
							if (getAmtIntervalCount < getAmtIntervalCountT) {
								// 提额间隔天数/批复有效期（天）不能低于省级配置
								return num = -14;
							}
						}
						
						if(!StringUtils.isEmpty(bizParamCfgT.getAmtCoefficient()) 
								&& !StringUtils.isEmpty(bizParamCfg.getAmtCoefficient())){
							float getAmtCoefficientT = Float.parseFloat(bizParamCfgT.getAmtCoefficient());
							float getAmtCoefficient = Float.parseFloat(bizParamCfg.getAmtCoefficient());
							
							if (getAmtCoefficient > getAmtCoefficientT) {
								// 提额系数不能高于省级配置
								return num = -15;
							}
						}
						
						if(!StringUtils.isEmpty(bizParamCfgT.getAmtLmtMin()) 
								&& !StringUtils.isEmpty(bizParamCfg.getAmtLmtMin())){
							float getAmtLmtMinT = Float.parseFloat(bizParamCfgT.getAmtLmtMin());
							float getAmtLmtMin = Float.parseFloat(bizParamCfg.getAmtLmtMin());
							
							if (getAmtLmtMin != getAmtLmtMinT) {
								// 提额额度最小值须等于省级配置
								return num = -16;
							}
						}
						
						// 修改更新法人机构
						num = bizParamCfgDao.updateByPk(bizParamCfg);
						if(num >= 1){
							//删除原有禁入行业配置
							oldBizParamValue.setValueId(bizParamCfg.getForbidIndus());
							num = sDicTreeDao.deleteByValueAndEnname(oldBizParamValue);
							
							BizParamValueVO bizParamValueVO = new BizParamValueVO();
							bizParamValueVO.setValueId(bizParamCfgT.getForbidIndus());
							//查询省级配有的禁入行业
							List<BizParamValue> bizParamvalues = sDicTreeDao.queryAllBizValue(bizParamValueVO);
							if(bizParamvalues != null && bizParamvalues.size() > 0){
								//省级有配置禁入行业
								for (BizParamValue bizParamValue : bizParamvalues) {
									int sum = 0;
									bizParamValue.setValueId(bizParamCfg.getForbidIndus());
									if(listValues != null && listValues.size() > 0){
										for (BizParamValue newBizParamValue : listValues) {
											newBizParamValue.setValueId(bizParamCfg.getForbidIndus());
											if(newBizParamValue.getEnname().equals(bizParamValue.getEnname())){
												sum ++;
											}
										}
										if(sum < 1){
											listValues.add(bizParamValue);
										}
									}else{
										listValues.add(bizParamValue);
									}
								}
								//批量新增禁入行业
								sDicTreeDao.insertMoreBizParamValue(listValues);
							}else{
								//省级没有配置禁入行业
								if(listValues != null && listValues.size() > 0){
									//删除原来禁入行业
									oldBizParamValue.setValueId(bizParamCfg.getForbidIndus());
									num = sDicTreeDao.deleteByValueAndEnname(oldBizParamValue);
									for (BizParamValue bizParamValue : listValues) {
										bizParamValue.setValueId(bizParamCfg.getForbidIndus());
									}
									sDicTreeDao.insertMoreBizParamValue(listValues);
								}
							}
						}
					} else {
						// 没有省级配置，直接修改更新
						num = bizParamCfgDao.updateByPk(bizParamCfg);
						if(num == 1){
							if(listValues != null && listValues.size() > 0){
								oldBizParamValue.setValueId(bizParamCfg.getForbidIndus());
								num = sDicTreeDao.deleteByValueAndEnname(oldBizParamValue);
								for (BizParamValue bizParamValue : listValues) {
									bizParamValue.setValueId(bizParamCfg.getForbidIndus());
								}
								sDicTreeDao.insertMoreBizParamValue(listValues);
							}
						}
					}
				}
			}else{
				//不是修改本法人机构，不能修改
				num = 0;
			}

		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:" + inBizParamCfgVo + "修改的数据条数为" + num);
		return num;
	}

	/**
	 * 全表更新
	 */
	public int updateByStatus(BizParamCfgVO inBizParamCfgVo) {
		logger.debug("当前修改数据为:" + inBizParamCfgVo.toString());
		int num = 0;
		try {
			BizParamCfg bizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, bizParamCfg);
			num = bizParamCfgDao.updateByStatus(bizParamCfg);
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:" + inBizParamCfgVo + "修改的数据条数为" + num);
		return num;
	}

	/**
	 * 查询操作
	 */
	public BizParamCfgVO queryByRFlag(BizParamCfgVO inBizParamCfgVo) {

		logger.debug("当前查询参数信息为:" + inBizParamCfgVo);
		try {
			BizParamCfg queryBizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, queryBizParamCfg);
			BizParamCfg queryRslBizParamCfg = bizParamCfgDao.queryByRFlag(queryBizParamCfg);
			if (Objects.nonNull(queryRslBizParamCfg)) {
				BizParamCfgVO outBizParamCfgVo = beanCopy(queryRslBizParamCfg, new BizParamCfgVO());
				logger.debug("当前查询结果为:" + outBizParamCfgVo.toString());
				return outBizParamCfgVo;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	public BizParamCfgVO queryByPk(BizParamCfgVO inBizParamCfgVo) {

		logger.debug("当前查询参数信息为:" + inBizParamCfgVo);
		try {
			BizParamCfg queryBizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, queryBizParamCfg);
			BizParamCfg queryRslBizParamCfg = bizParamCfgDao.queryByPk(queryBizParamCfg);
			if (Objects.nonNull(queryRslBizParamCfg)) {
				BizParamCfgVO outBizParamCfgVo = beanCopy(queryRslBizParamCfg, new BizParamCfgVO());
				logger.debug("当前查询结果为:" + outBizParamCfgVo.toString());
				return outBizParamCfgVo;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	/**
	 * 根据当前登录法人机构代码查询
	 */
	public BizParamCfgVO queryByLoginLegalOrgCode(BizParamCfgVO inBizParamCfgVo) {

		logger.debug("当前查询参数信息为:" + inBizParamCfgVo);
		try {
			BizParamCfg queryBizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, queryBizParamCfg);
			BizParamCfg queryRslBizParamCfg = bizParamCfgDao.queryByLoginLegalOrgCode(queryBizParamCfg);
			if (Objects.nonNull(queryRslBizParamCfg)) {
				BizParamCfgVO outBizParamCfgVo = beanCopy(queryRslBizParamCfg, new BizParamCfgVO());
				logger.debug("当前查询结果为:" + outBizParamCfgVo.toString());
				return outBizParamCfgVo;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}
	/**
	 * 根据法人机构查询
	 */
	public BizParamCfgVO queryByLegalOrgCode(BizParamCfgVO inBizParamCfgVo) {

		logger.debug("当前查询参数信息为:" + inBizParamCfgVo);
		try {
			BizParamCfg queryBizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, queryBizParamCfg);
			BizParamCfg queryRslBizParamCfg = bizParamCfgDao.queryByLegalOrgCode(queryBizParamCfg);
			if (Objects.nonNull(queryRslBizParamCfg)) {
				BizParamCfgVO outBizParamCfgVo = beanCopy(queryRslBizParamCfg, new BizParamCfgVO());
				logger.debug("当前查询结果为:" + outBizParamCfgVo.toString());
				return outBizParamCfgVo;
			} else {
				queryBizParamCfg.setLegalOrgCode("00001");
				BizParamCfg bizParamCfg = bizParamCfgDao.queryByLegalOrgCode(queryBizParamCfg);
				if(Objects.nonNull(bizParamCfg)){
					BizParamCfgVO outBizParamCfg = beanCopy(bizParamCfg, new BizParamCfgVO());
					return outBizParamCfg;
				}else{
					return null;
				}
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	/**
	 * 查询全部配置信息
	 */
	@SuppressWarnings("unchecked")
	public List<BizParamCfgVO> queryAllBizParam(BizParamCfgVO inBizParamCfgVo) {

		logger.debug("当前查询参数信息为:" + inBizParamCfgVo);
		List<BizParamCfgVO> list = null;
		try {
			BizParamCfg queryBizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, queryBizParamCfg);

			List<BizParamCfg> bizParamCfgs = bizParamCfgDao.queryAllBizParam(inBizParamCfgVo);
			logger.debug("查寻所有结果集数量为:" + bizParamCfgs.size());
			pageSet(bizParamCfgs, inBizParamCfgVo);
			list = (List<BizParamCfgVO>) beansCopy(bizParamCfgs, BizParamCfgVO.class);

		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
				
 
	}

	public int queryByRpovinceFlag(BizParamCfgVO inBizParamCfgVo) {

		logger.debug("当前查询参数为:" + inBizParamCfgVo);
		int num = 0;
		try {
			BizParamCfg bizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, bizParamCfg);
			num = bizParamCfgDao.queryByRpovinceFlag(bizParamCfg);
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:" + inBizParamCfgVo + "修改的数据条数为" + num);
		return num;

	}

	/**
	 * 根据法人机构查询条数
	 */

	public int queryByOrgCode(BizParamCfgVO inBizParamCfgVo) {
		logger.debug("当前查询参数为:" + inBizParamCfgVo);
		int num = 0;
		try {
			BizParamCfg bizParamCfg = new BizParamCfg();
			beanCopy(inBizParamCfgVo, bizParamCfg);
			num = bizParamCfgDao.queryByOrgCode(bizParamCfg);
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:" + inBizParamCfgVo + "修改的数据条数为" + num);

		return num;

	}

	/**
	 * 查询用户权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<BizParamCfgVO> queryAllOwner(BizParamCfgVO bizParamCfgVo) {

		logger.debug("当前查询本人所属数据信息的参数信息为:");
		List<BizParamCfgVO> list = null;
		try {
			List<BizParamCfg> bizParamCfgs = bizParamCfgDao.queryAllOwnerByPage(bizParamCfgVo);
			logger.debug("当前查询本人所属数据信息的结果集数量为:" + bizParamCfgs.size());
			pageSet(bizParamCfgs, bizParamCfgVo);
			list = (List<BizParamCfgVO>) beansCopy(bizParamCfgs, BizParamCfgVO.class);

		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;

	}

	/**
	 * 查询当前机构权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<BizParamCfgVO> queryAllCurrOrg(BizParamCfgVO bizParamCfgVo) {

		logger.debug("当前查询本人所属机构数据信息的参数信息为:");
		List<BizParamCfg> bizParamCfgs = bizParamCfgDao.queryAllCurrOrgByPage(bizParamCfgVo);
		logger.debug("当前查询本人所属机构数据信息的结果集数量为:" + bizParamCfgs.size());
		List<BizParamCfgVO> list = null;
		try {
			pageSet(bizParamCfgs, bizParamCfgVo);
			list = (List<BizParamCfgVO>) beansCopy(bizParamCfgs, BizParamCfgVO.class);

		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;

	}

	/**
	 * 查询当前机构及下属机构权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<BizParamCfgVO> queryAllCurrDownOrg(BizParamCfgVO bizParamCfgVo) {

		logger.debug("当前查询本人所属机构及以下数据信息的参数信息为:");
		List<BizParamCfg> bizParamCfgs = bizParamCfgDao.queryAllCurrDownOrgByPage(bizParamCfgVo);
		logger.debug("当前查询本人所属机构及以下数据信息的结果集数量为:" + bizParamCfgs.size());
		List<BizParamCfgVO> list = null;
		try {
			pageSet(bizParamCfgs, bizParamCfgVo);
			list = (List<BizParamCfgVO>) beansCopy(bizParamCfgs, BizParamCfgVO.class);

		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;

	}

	/**
	 * 字段枚举
	 */
	public String bizParamCfgEnumFn(String legalOrgCode, BizParamCfgEnum param) {
		BizParamCfgVO bizParamCfgVo = new BizParamCfgVO();
		bizParamCfgVo.setLegalOrgCode(legalOrgCode);
		//根据法人机构代码和生效状态查询业务参数信息
		BizParamCfgVO newBizParamCfgVo = queryByLegalOrgCode(bizParamCfgVo);
		if(newBizParamCfgVo != null){
			if (BizParamCfgEnum.FORBID_INDUS.equals(param)) {
				BizParamValueVO bizParamValue = new BizParamValueVO();
				bizParamValue.setValueId((newBizParamCfgVo.getForbidIndus()));
				//根据配置禁入行业uid查询禁入行业
				List<BizParamValue> bizParamValues = sDicTreeDao.queryAllBizValue(bizParamValue);
				StringBuffer sb = new StringBuffer();
				String strl = null;
				if(bizParamValues != null && bizParamValues.size()> 0){
					for (BizParamValue newBizParamValue : bizParamValues) {
						sb.append(newBizParamValue.getEnname()+",");
					}
					strl = sb.substring(0, sb.length()-1);
				}
				
				return strl;//返回禁入行业字符串
				
			} else if (BizParamCfgEnum.CRD_EXPIRY_DT.equals(param)) {
				
				return newBizParamCfgVo.getCrdExpiryDt();//返回征信查询有效期（天)字符串
			} else if (BizParamCfgEnum.SIGN_LMT_CONT.equals(param)) {
				
				return newBizParamCfgVo.getSignLmtCont();//返回是否签订额度协议字符串
			} else if (BizParamCfgEnum.APPR_EXPIRY_DT.equals(param)) {
				
				return newBizParamCfgVo.getApprExpiryDt();//返回批复有效期（天)字符串
			} else if (BizParamCfgEnum.CHK_RPT_CRT_PERIOD.equals(param)) {
				
				return newBizParamCfgVo.getChkRptCrtPeriod();//返回检查报告生成周期（月）字符串
			} else if (BizParamCfgEnum.REG_CHK_CRT_PERIOD.equals(param)) {
				
				return newBizParamCfgVo.getRegChkCrtPeriod();//返回定期检查任务生成周期（月）字符串
			} else if (BizParamCfgEnum.CRD_ORG_UPPER_LMT.equals(param)) {
				
				return newBizParamCfgVo.getCrdOrgUpperLmt();//返回授信机构数量上限 字符串
			} else if (BizParamCfgEnum.CRD_LMT_AMT.equals(param)) {
				
				return newBizParamCfgVo.getCrdLmtAmt();//返回授信总限额（万）字符串
			} else if (BizParamCfgEnum.ORG_LMT_AMT.equals(param)) {
				
				return newBizParamCfgVo.getOrgLmtAmt();//返回机构授信限额（万）字符串
			} else if (BizParamCfgEnum.TPH_CHK_EXPIRY_DT.equals(param)) {
				
				return newBizParamCfgVo.getTphChkExpiryDt();//返回支用有效期（天）字符串
			} else if (BizParamCfgEnum.TPH_CHK_LMT_AMT.equals(param)) {
				
				return newBizParamCfgVo.getTphChkLmtAmt();//返回电核限额字符串
			}else if(BizParamCfgEnum.LOAN_AFTER_TREM.equals(param)){
				
				return newBizParamCfgVo.getLoanAfterTrem();//返回贷后征信查询期限字符串
			}else if (BizParamCfgEnum.AMT_INTERVAL_COUNT.equals(param)) {
				
				return newBizParamCfgVo.getAmtIntervalCount();//提额间隔天数/批复有效期（天）
			}else if (BizParamCfgEnum.AMT_COEFFICIENT.equals(param)) {
				
				return newBizParamCfgVo.getAmtCoefficient();//提额系数
			}else if (BizParamCfgEnum.AMT_LMT_MIN.equals(param)) {
				
				return newBizParamCfgVo.getAmtLmtMin();//提额额度最小值
			}
			
		}
		return null;
	}

    @Override
    public BizParamCfgVO queryByLegalOrgCode(String legalOrgCode) {
        BizParamCfgVO inBizParamCfgVo = new BizParamCfgVO();
        inBizParamCfgVo.setLegalOrgCode(legalOrgCode);
        return queryByLegalOrgCode(inBizParamCfgVo);
    }

}
